Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
2 Skipped Deployments
|
Deploying openstatus-docs with
|
| Latest commit: |
8c1399f
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://00685dfe.openstatus-1sy.pages.dev |
| Branch Preview URL: | https://chore-improve-onboarding-flo.openstatus-1sy.pages.dev |
There was a problem hiding this comment.
3 issues found across 43 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="apps/dashboard/src/components/onboarding/checks-table-adapter.ts">
<violation number="1" location="apps/dashboard/src/components/onboarding/checks-table-adapter.ts:77">
P2: Do not replace the measured latency with summed phase durations; this can show incorrect latency values in onboarding results.</violation>
</file>
<file name="apps/dashboard/src/components/onboarding/checks-table.tsx">
<violation number="1" location="apps/dashboard/src/components/onboarding/checks-table.tsx:159">
P2: Use the count of visible columns for `colSpan` instead of total defined columns.</violation>
</file>
<file name="apps/dashboard/src/data/onboarding-checks.ts">
<violation number="1" location="apps/dashboard/src/data/onboarding-checks.ts:38">
P2: Avoid using `Date.now()` for pre-rendered mock rows; it can produce different server/client timestamp output during hydration. Use a fixed seed timestamp so initial HTML stays stable.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
|
@claude review |
|
Claude finished @mxkaske's task in 3m 26s —— View job Code Review: chore/improve-onboarding-flowTasks
This is a well-structured PR. The 3-step flow is clean, the streaming preview adds a compelling "magic moment," and the issues flagged by the previous AI review (phase-sum latency, colSpan, P2 — Substantive1. Dashboard theme is permanently mutated when the user changes "Mode" then skips onValueChange={(v) => {
field.onChange(v);
setDashboardTheme(v); // ← persists even if user hits "Do this later"
}}If the user flips to Dark in the preview and then skips Step 2, their dashboard stays dark. The original theme should be saved and restored on skip/unmount. A 2. No rate limiting on Each call fans out to all ~28 active regions. There's no debounce, cooldown, or rate-limit on the endpoint — a single authenticated user could fire it in a tight loop. The retry button in 3. Second rejection in (error) => {
rejection = { error }; // ← unconditionally overwrites a prior rejection
pending--;
wake?.();
},If two promises reject in the same microtask batch, only the last error survives. For the checker fan-out, individual failures return error-shaped if (!rejection) rejection = { error };P3 — Minor4. Locked preview in Step 2 shows stale draft components={previewValues.components ?? []}
5. const activeWorkspace =
userAndWorkspace.usersToWorkspaces?.find(({ workspace }) => {
if (workspaceSlugCookie) return workspace.slug === workspaceSlugCookie;
return true; // ← returns the first element
})?.workspace ?? userAndWorkspace.usersToWorkspaces?.[0]?.workspace;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// unreachable: find with `return true` already returns [0]The 6.
7.
8. It's used at lines 229 and 255 but declared at the bottom of the file. Function declarations are hoisted so this works, but moving it above Positive callouts
|
There was a problem hiding this comment.
2 issues found across 14 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="apps/dashboard/src/components/forms/status-page/theme-picker.tsx">
<violation number="1" location="apps/dashboard/src/components/forms/status-page/theme-picker.tsx:40">
P2: Using `resolvedTheme` directly during initial render can cause hydration mismatch for swatch colors. Gate theme-dependent rendering until mount (or render a stable fallback first) before switching to dark/light palette.</violation>
</file>
<file name="apps/dashboard/src/app/onboarding/_steps/step-2.tsx">
<violation number="1" location="apps/dashboard/src/app/onboarding/_steps/step-2.tsx:51">
P2: Locking step 2 depends on transient mutation data, so a refresh can unlock the form even when `pageStatus` is already `completed`.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
There was a problem hiding this comment.
2 issues found across 7 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="apps/dashboard/src/components/forms/onboarding/create-page.tsx">
<violation number="1" location="apps/dashboard/src/components/forms/onboarding/create-page.tsx:88">
P2: The original dashboard theme is snapshotted too early and can remain `undefined`, so unmount may fail to restore the user’s prior theme.</violation>
</file>
<file name="apps/dashboard/src/lib/edge-context.ts">
<violation number="1" location="apps/dashboard/src/lib/edge-context.ts:48">
P2: When `workspace-slug` is set but invalid, this no longer falls back to the first workspace, causing `activeWorkspace` to become `undefined` and the request context to return `null`.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
There was a problem hiding this comment.
1 issue found across 1 file (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="packages/services/src/monitor/__tests__/stream-monitor-preview.test.ts">
<violation number="1" location="packages/services/src/monitor/__tests__/stream-monitor-preview.test.ts:52">
P2: Use `delete` here instead of assigning `undefined`; otherwise the env var is not actually restored to the unset state.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
There was a problem hiding this comment.
1 issue found across 3 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="apps/dashboard/src/components/onboarding/status-page-preview.tsx">
<violation number="1" location="apps/dashboard/src/components/onboarding/status-page-preview.tsx:123">
P2: The new `!mounted` early return prevents `previewRef` from being established before `mounted` flips, so `StatusBar` may never receive the intended portal container.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
| .map((c, i) => ({ key: `c-${i}`, name: c.name })), | ||
| ]; | ||
|
|
||
| if (!mounted) { |
There was a problem hiding this comment.
P2: The new !mounted early return prevents previewRef from being established before mounted flips, so StatusBar may never receive the intended portal container.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/dashboard/src/components/onboarding/status-page-preview.tsx, line 123:
<comment>The new `!mounted` early return prevents `previewRef` from being established before `mounted` flips, so `StatusBar` may never receive the intended portal container.</comment>
<file context>
@@ -119,6 +120,12 @@ export function OnboardingStatusPagePreview({
.map((c, i) => ({ key: `c-${i}`, name: c.name })),
];
+ if (!mounted) {
+ return (
+ <Skeleton className={cn("rounded-md border border-border", className)} />
</file context>
No description provided.